package com.dingding.order.core.distance.biz.abstracts;

import java.lang.reflect.ParameterizedType;

import com.dingding.common.core.base.dto.AbstractResponse;
import com.dingding.common.core.util.GetDistanceUtil;
import com.dingding.common.core.util.dto.CalculatDistanceDTO;

/**
 * 
 * @ClassName: AbstractCalculatDistance 
 * @Description:计算距离价格抽象类
 * @author CHEHAUNBO 
 * @date 2016年6月29日 下午3:12:49
 * 
 */
@SuppressWarnings("all")
public class AbstractCalculatDistance<T, M> extends AbstractResponse<T, M> {

	protected Class<T> clazzT = null;
	protected Class<M> clazzM = null;

	public AbstractCalculatDistance() {
		if (this.clazzT == null) {
			this.clazzT = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
					.getActualTypeArguments()[0];
		}
		if (this.clazzM == null) {
			this.clazzM = (Class<M>) ((ParameterizedType) getClass().getGenericSuperclass())
					.getActualTypeArguments()[1];
		}
	}

	/**
	 * 
	 * 计算订单里程
	 * 
	 * @Title: distance
	 * @param  startLongitude 起点经度
	 * @param  startLatitude 起点纬度
	 * @param  endLongitude 终点经度
	 * @param  endLatitude 终点纬度
	 * @return Double 计算好的里程数
	 * @author CHEHAUNBO
	 * @since V2.3.0
	 * 
	 * 修改人:车焕波 
	 * 修改时间:V2016-07-18
	 * 修改内容：添加城市编号
	 * 修改版本：V2.3.1
	 * 
	 */
	protected CalculatDistanceDTO distance(Double startLongitude, Double startLatitude, Double endLongitude,
			Double endLatitude) {

		// 计算两点间的距离
		CalculatDistanceDTO calculatDistanceDTO = GetDistanceUtil.getSingleDistance(startLongitude, startLatitude,
				endLongitude, endLatitude);

		// 将计算距离保留一位小数
		return calculatDistanceDTO;

	}

}
